/*
数组逆置或右移  难度：中级
任务描述
编写函数，功能为对形式参数数组进行整体逆置变换；再编写函数，功能为对形式参数数组元素进行右移一位操作，所有元素向后移动一个位置，原最后元素移到首位。
在主函数中首先输入一个整数N(1<N<=100)和M（M>=0，M是0表示逆置，否则表示右移M位）,然后再输入N个整数存入数组中，调用函数进行变换后，输出数组所有元素。 
输入格式:
一个整数N(1<N<=100)和M（M>=0，M是0表示逆置，否则表示右移M位）,然后是N个整数
输出格式:
输出变换后的数组元素
输入样例:
6 0
1 8 9 0 4 3
输出样例:
3 4 0 9 8 1
输入样例:
10 3
1 8 9 0 4 3 2 5 -3 21
输出样例:
5 -3 21 1 8 9 0 4 3 2
*/

#include<stdio.h>

void Reverse(int arr[],int len){
	for (int i=len-1;i>=0;i--){
		printf("%d ",arr[i]);
	}
}

void Move(int arr[],int len,int m){
	int temp[len];
	for (int i=0;i<len;i++){
		if (i>=len-m){
			temp[m-len+]=arr[i];
		}else{
			temp[i+m%len]=arr[i];
		}
	}
	for (int j=0;j<len;j++){
		 
		printf("%d ",temp[j]);
	}
}

int main(){

	int n,m;
	scanf("%d %d",&n,&m);
	
	int arr[n];
	for (int i=0;i<n;i++){
		scanf("%d",&arr[i]);
	}
	
	m==0 ? Reverse(arr,n) : Move(arr,n,m);

	return 0;
}
 
// #include <stdio.h>				// 还要研究一下
//
//// 数组逆置函数
//void Reverse(int arr[], int len) {
//    for (int i = 0; i < len / 2; i++) {
//        int temp = arr[i];
//        arr[i] = arr[len - 1 - i];
//        arr[len - 1 - i] = temp;
//    }
//    for (int i = 0; i < len; i++) {
//        printf("%d ", arr[i]);
//    }
//}
//
//// 数组右移函数
//void Move(int arr[], int len, int m) {
//    m %= len; // 处理m大于len的情况
//    int temp[100];
//    for (int i = 0; i < len; i++) {
//        temp[(i + m) % len] = arr[i];
//    }
//    for (int i = 0; i < len; i++) {
//        printf("%d ", temp[i]);
//    }
//}
//
//int main() {
//    int n, m;
//    scanf("%d %d", &n, &m);
//
//    int arr[100];
//    for (int i = 0; i < n; i++) {
//        scanf("%d", &arr[i]);
//    }
//
//    if (m == 0) {
//        Reverse(arr, n);
//    } else {
//        Move(arr, n, m);
//    }
//
//    return 0;
//}